Быстрый старт | Clusters_Federation

Быстрый старт

В этом руководстве приведена инструкция по ручному разворачиванию отказоустойчивой системы из двух кластеров Tarantool Data Grid (TDG) с использованием Tarantool Clusters Federation (TCF). Узнать больше об архитектуре и элементах TCF вы можете на странице Архитектура.

Руководство включает следующие шаги:

Подготовка окружения

Подготовка виртуальных машин

Для руководства необходимо подготовить две виртуальные машины, которые могут взаимодействовать между собой по сети. Поддерживаемые операционные системы описаны в разделе Программные требования.

Предположим, что виртуальные машины имеют следующие IP-адреса:

  • 192.168.64.9

    На данной виртуальной машине будут запущены:

    • Активный кластер TDG (Cluster A), состоящий из одного узла.

    • TCF Gateway – для отправки изменений с Cluster A на Cluster B.

    • TCF Destination – для применения изменений, пришедших с Cluster B на Cluster A.

    • etcd – для хранения состояния кластеров.

  • 192.168.64.12

    На данной виртуальной машине будут запущены:

    • Пассивный кластер TDG (Cluster B), состоящий из одного узла.

    • TCF Gateway – для отправки изменений с Cluster B на Cluster A.

    • TCF Destination – для применения изменений, пришедших с Cluster A на Cluster B.

Установка Tarantool Enterprise Edition и etcd

Перед разворачиванием кластеров TDG и TCF установите следующее программное обеспечение:

  • Tarantool Enterprise Edition на обе виртуальные машины.

  • etcd на первую виртуальную машину (192.168.64.9 в данном руководстве).

Запуск etcd

Перед запуском и настройкой кластеров необходимо запустить etcd, установленный на первой виртуальной машине (192.168.64.9 в данном руководстве):

  1. Установите для переменной окружения ETCD_ENABLE_V2 значение true:

    $ export ETCD_ENABLE_V2=true
    
  2. Запустите etcd с флагами –listen-client-urls и -advertise-client-urls:

    $ etcd --listen-client-urls http://192.168.64.9:2379,http://127.0.0.1:2379 \
           --advertise-client-urls http://192.168.64.9:2379
    

Скачивание TGZ-файлов для развертывания

TCF распространяется в виде TGZ-архива. Вам необходимо скачать следующие файлы в личном кабинете tarantool.io:

  • Сборку TDG, подготовленную для работы с TCF: <tcf_version>-tdg-<tdg_version>.x86_64.tar.gz.

  • Сборку TCF: tcf-<tcf_version>.tar.gz.

Если у вас нет доступа к личному кабинету, свяжитесь с нами через форму обратной связи или напишите на sales@tarantool.io.

Запуск и настройка кластеров

Подготовка TGZ-файлов для развертывания

  1. Скопируйте архив <tcf_version>-tdg-<tdg_version>.x86_64.tar.gz в домашние директории обеих виртуальных машин и распакуйте его:

    $ tar -xzf 0.2.0-tdg-2.11.1.0.x86_64.tar.gz
    
  2. Скопируйте архив tcf-<tcf_version>.tar.gz в домашние директории обеих виртуальных машин и распакуйте его:

    $ tar -xzf tcf-0.2.0.tar.gz
    

Запуск активного кластера

Запустите активный кластер на первой виртуальной машине (192.168.64.9 в данном руководстве). Для этого:

  1. Перейдите в директорию tdg:

    $ cd tdg
    
  2. Установите переменную окружения TARANTOOL_CLUSTER_COOKIE:

    $ export TARANTOOL_CLUSTER_COOKIE=tdg-cluster-cookie-1
    
  3. Запустите кластер:

    $ tarantool ./init.lua --bootstrap true
    
  4. Создайте пользователя db_user и назначьте ему роль super:

    tarantool> box.schema.user.create('db_user', { password = 'topsecret' })
    ---
    ...
    tarantool> box.schema.user.grant('db_user', 'super')
    ---
    ...
    

Запуск пассивного кластера

Запустите пассивный кластер на второй виртуальной машине (192.168.64.12 в данном руководстве). Для этого:

  1. Перейдите в директорию tdg:

    $ cd tdg
    
  2. Установите переменную окружения TARANTOOL_CLUSTER_COOKIE:

    $ export TARANTOOL_CLUSTER_COOKIE=tdg-cluster-cookie-2
    
  3. Запустите кластер:

    $ tarantool ./init.lua --bootstrap true
    
  4. Создайте пользователя db_user и назначьте ему роль super:

    tarantool> box.schema.user.create('db_user', { password = 'topsecret' })
    ---
    ...
    tarantool> box.schema.user.grant('db_user', 'super')
    ---
    ...
    

Настройка активного кластера

Чтобы настроить активный кластер, запущенный на первой виртуальной машине (192.168.64.9 в данном руководстве):

  1. Перейдите на http://192.168.64.9:8080/ и откройте вкладку Cluster.

  2. Нажмите кнопку Failover: disabled в правом верхнем углу, установите Failover mode в Stateful и поменяйте настройки следующим образом:

    • State provider: выберите etcd в раскрывающемся списке.

    • Endpoints: поменяйте адреса следующим образом:

      http://192.168.64.9:4001
      http://192.168.64.9:2379
      
    • Prefix: поменяйте значение на /cluster_a.

    Нажмите Apply, чтобы сохранить настройки.

  3. Нажмите кнопку Edit replica set и поменяйте настройки:

    • Replica set name: введите произвольное название, например, replicaset001.

    • Включите роль tcf-coordinator.

    Нажмите Save.

  4. Перейдите на вкладку TCF, нажмите кнопку Settings и поменяйте настройки следующим образом:

    • Cluster 1: cluster_a

    • Cluster 2: cluster_b

    • Initial status: active

    • DML users: db_user

    • Replication user: replicator

    • Replication password: foobar

    Нажмите Save. Кластер должен перейти в активное состояние:

    cluster_a: active
    cluster_b: unknown
    

Настройка пассивного кластера

Чтобы настроить активный кластер, запущенный на второй виртуальной машине (192.168.64.12 в данном руководстве):

  1. Перейдите на http://192.168.64.12:8080/ и откройте вкладку Cluster.

  2. Нажмите кнопку Failover: disabled в правом верхнем углу, установите Failover mode в Stateful и поменяйте настройки следующим образом:

    • State provider: выберите etcd в раскрывающемся списке.

    • Endpoints: поменяйте адреса следующим образом:

      http://192.168.64.9:4001
      http://192.168.64.9:2379
      
    • Prefix: поменяйте значение на /cluster_b.

    Нажмите Apply, чтобы сохранить настройки.

  3. Нажмите кнопку Edit replica set и поменяйте настройки:

    • Replica set name: введите произвольное название, например, replicaset002.

    • Включите роль tcf-coordinator.

    Нажмите Save.

  4. Перейдите на вкладку TCF, нажмите кнопку Settings и поменяйте настройки следующим образом:

    • Cluster 1: cluster_b

    • Cluster 2: cluster_a

    • Initial status: passive

    • DML users: db_user

    • Replication user: replicator

    • Replication password: foobar

    Нажмите Save. Кластер должен перейти в пассивное состояние:

    cluster_b: passive
    cluster_a: active
    

Создание модели данных

Чтобы создать модель данных, в веб-интерфейсе обоих кластеров повторите следующие шаги:

  1. В меню слева откройте вкладку Model.

  2. Вставьте следующую модель в поле Request и нажмите Submit:

    [
        {
            "name": "MusicBand",
            "type": "record",
            "fields": [
                {"name": "name", "type": "string"},
                {"name": "genre", "type": {"type":"array", "items":"string"}},
                {"name": "wasformed", "type":"long"}
            ],
            "indexes": ["name", "genre", "wasformed"]
        },
        {
            "name": "Artist",
            "type": "record",
            "fields": [
                {"name": "fullname", "type": "string"},
                {"name": "country", "type": "string"},
                {"name": "instruments", "type": {"type":"array", "items":"string"}}
            ],
            "indexes": ["fullname"]
        }
    ]
    

    При успешном вставке модели в поле Response вернется ответ OK.

Добавление данных на активном кластере

Добавьте данные на активном кластере следующим образом:

  1. Перейдите на http://192.168.64.9:8080/ и откройте вкладку Graphql.

  2. В поле запроса вставьте данные и нажмите кнопку Execute query:

    mutation all {
      rammstein:MusicBand(insert: {
          name: "Rammstein",
          genre: ["metal", "industrial", "gothic"],
          wasformed: 1994}) {
        name
        genre
        wasformed
      }
      linkinpark:MusicBand(insert: {
          name: "Linkin Park",
          genre: ["alternative", "metal"],
          wasformed: 1996}) {
        name
        genre
        wasformed
      }
    }
    

Конфигурирование и запуск репликаторов данных

Конфигурирование репликаторов

Чтобы сконфигурировать репликаторы, повторите следующие шаги на обеих виртуальных машинах:

  1. Создайте файл config_a_b.yaml в домашней директории и вставьте следующую конфигурацию для репликации данных с Cluster A на Cluster B:

    gateway:
      grpc_server:
        host: 192.168.64.9
        port: 10080
      replica_type: anonymous
      stream_instances:
        - uri: 192.168.64.9:3301
          user: replicator
          password: foobar
    
    destination:
      gateway:
        host: 192.168.64.9
        port: 10080
      vshard_routers:
        hosts:
          - "192.168.64.12:3301"
        user: replicator
        password: foobar
    
  2. Создайте файл config_b_a.yaml в домашней директории и вставьте следующую конфигурацию для репликации данных с Cluster B на Cluster A:

    gateway:
      grpc_server:
        host: 192.168.64.12
        port: 10080
      replica_type: anonymous
      stream_instances:
        - uri: 192.168.64.12:3301
          user: replicator
          password: foobar
    
    destination:
      gateway:
        host: 192.168.64.12
        port: 10080
      vshard_routers:
        hosts:
          - "192.168.64.9:3301"
        user: replicator
        password: foobar
    

Запуск репликатора Cluster A -> Cluster B

  1. На первой виртуальной машине (192.168.64.9 в данном руководстве) запустите TCF Gateway для отправки изменений с Cluster A на Cluster B:

    $ ./tcf-gateway --config config_a_b.yaml
    
  2. На второй виртуальной машине (192.168.64.12 в данном руководстве) запустите TCF Destination для применения изменений, пришедших с Cluster A на Cluster B:

    $ ./tcf-destination --config config_a_b.yaml
    

Запуск репликатора Cluster B -> Cluster A

  1. На второй виртуальной машине (192.168.64.12 в данном руководстве) запустите TCF Gateway для отправки изменений с Cluster B на Cluster A:

    $ ./tcf-gateway --config config_b_a.yaml
    
  2. На первой виртуальной машине (192.168.64.9 в данном руководстве) запустите TCF Destination для применения изменений, пришедших с Cluster B на Cluster A:

    $ ./tcf-destination --config config_b_a.yaml
    

Проверка репликации данных

Чтобы проверить успешную репликацию данных с Cluster A на Cluster B:

  1. Перейдите на http://192.168.64.12:8080/ и откройте вкладку Graphql.

  2. Сделайте следующий запрос:

    query {
      MusicBand(name:"Linkin Park") {
        name
        wasformed
        genre
      }
    }
    

    В поле ответа должен вернуться следующий результат:

    {
      "data": {
        "MusicBand": [
          {
            "genre": [
              "alternative",
              "metal"
            ],
            "name": "Linkin Park",
            "wasformed": 1996
          }
        ]
      }
    }
    

Проверка переключения состояния кластера

  1. Перейдите на вкладку TCF в веб-интерфейсе любого из кластеров.

  2. Нажмите кнопку Toggle cluster states, чтобы сделать Cluster B активным. Статусы должны поменяться:

    cluster_a: passive
    cluster_b: active
    
  3. Попробуйте добавить или удалить данные на Cluster B на вкладке Graphql и убедитесь, что изменения успешно реплицируются на Cluster A.

  4. Проверьте, что пассивный кластер заблокирован для db_user, с помощью команды tt connect:

    $ tt connect 192.168.64.9:3301 -u db_user -p topsecret
       • Connecting to the instance...
       ⨯ failed to run interactive console: failed to create new console: failed to connect: failed to authenticate: DML is blocked, cluster is passive (ClientError, code 0x1ff)
    
Found what you were looking for?
Feedback